HUGO?=hugo
HUGO_IMG?=hugomods/hugo:0.115.3

THEME_MODULE = github.com/nginxinc/nginx-hugo-theme
## Pulls the current theme version from the Netlify settings
THEME_VERSION = $(NGINX_THEME_VERSION)

# if there's no local hugo, fallback to docker
ifeq (, $(shell ${HUGO} version 2> /dev/null))
ifeq (, $(shell docker version 2> /dev/null))
    $(error Docker and Hugo are not installed. Hugo (<0.91) or Docker are required to build the local preview.)
else
    HUGO=docker run --rm -it -v ${CURDIR}:/src -p 1313:1313 ${HUGO_IMG} hugo --bind 0.0.0.0 -p 1313
endif
endif

MARKDOWNLINT?=markdownlint
MARKDOWNLINT_IMG?=ghcr.io/igorshubovych/markdownlint-cli:latest

# if there's no local markdownlint, fallback to docker
ifeq (, $(shell ${MARKDOWNLINT} version 2> /dev/null))
ifeq (, $(shell docker version 2> /dev/null))
ifneq (, $(shell $(NETLIFY) "true"))
    $(error Docker and markdownlint are not installed. markdownlint or Docker are required to lint.)
endif
else
    MARKDOWNLINT=docker run --rm -i -v ${CURDIR}:/src --workdir /src ${MARKDOWNLINT_IMG}
endif
endif

MARKDOWNLINKCHECK?=markdown-link-check
MARKDOWNLINKCHECK_IMG?=ghcr.io/tcort/markdown-link-check:stable
# if there's no local markdown-link-check, fallback to docker
ifeq (, $(shell ${MARKDOWNLINKCHECK} --version 2> /dev/null))
ifeq (, $(shell docker version 2> /dev/null))
ifneq (, $(shell $(NETLIFY) "true"))
    $(error Docker and markdown-link-check are not installed. markdown-link-check or Docker are required to check links.)
endif
else
    MARKDOWNLINKCHECK=docker run --rm -it -v ${CURDIR}:/docs --workdir /docs ${MARKDOWNLINKCHECK_IMG}
endif
endif


.PHONY: all clean hugo-mod hugo-mod-tidy build-production build-staging hugo-server-drafts hugo-server netlify

all: hugo-mod build-production

all-staging: hugo-mod build-staging

all-dev: hugo-mod build-dev

# Removes the public directory generated by the `hugo` command
clean:
	if [[ -d ${PWD}/public ]] ; then rm -rf ${PWD}/public && echo "Removed public directory" ; else echo "Did not find a public directory to remove" ; fi

hugo-mod:
	hugo mod get $(THEME_MODULE)@v$(THEME_VERSION)

hugo-mod-tidy:
	hugo mod tidy && hugo mod verify

# Builds using the Hugo "production" environment
# For deploys to docs.nginx.com only
build-production:
	hugo --gc -e production

# Builds using the Hugo "staging" environment
# For deploys to docs-staging.nginx.com only
build-staging:
	hugo --gc -e staging

# Builds using the Hugo "development" environment
# For deploys to docs-dev.nginx.com only
build-dev:
	hugo --gc -e development

# Runs the Hugo server with content marked as draft
# Serves docs at localhost:1313
docs-drafts:
	${HUGO} server -D --disableFastRender

# Runs the Hugo server
# Serves docs at localhost:1313
docs:
	${HUGO} server --disableFastRender

docs-local: clean
	${HUGO}

lint-markdown:
	${MARKDOWNLINT} -c .markdownlint.yaml  -- content

link-check:
	${MARKDOWNLINKCHECK} $(shell find content -name '*.md')

# Can be used to deploy to netlify from your local
# development environment.
# Requires a netlify login.
netlify: clean
	netlify deploy --build -d public --alias $(shell git branch --show-current)-branch

deploy-preview: hugo-mod
	hugo --gc -b ${NETLIFY_DEPLOY_URL}/nginx-ingress-controller
